package servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import coneccion.DocumentoIdentidadConsultas;
import coneccion.RolesConsultas;
import coneccion.UsuariosConsultas;

import objetos.DocumentoIdentidad;
import objetos.Rol;
import objetos.Usuario;

/**
 * 
 */
public class UsuariosList extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UsuariosList() {
        super();

    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		
		request.setCharacterEncoding( "UTF-8");
		String nombreUsuario = request.getParameter("nombreUsuarioList");
		String nombreRol = request.getParameter("nombreRol");
		String apellidos = request.getParameter("apellidos");
		String tipoDocumento = request.getParameter("tipoDocumento");
		String numeroDocumento = request.getParameter("numeroDocumento");
		String numeroPagina = request.getParameter("numeroPagina"); 
		
		Integer numeroPaginaInt = Integer.valueOf(0);
		Integer cantidadFilasPorPagina = Integer.valueOf(10);
		Integer cantidadUsuarios = Integer.valueOf(0);
		Integer cantidadPaginas = Integer.valueOf(1);
		Integer primerResultado = Integer.valueOf(0);
		
		Usuario usuarioBusqueda = new Usuario();
		DocumentoIdentidad documentoIdentidad = null;
		Integer tipoDocumentoInt = null;
		List<Usuario> listaUsuarios = null;
		List<Rol> listaRoles = null;
		List<DocumentoIdentidad> listaDocumentosIdentidad= null;
		
		if((nombreUsuario!=null && nombreUsuario.length()>0) 
				|| (apellidos!=null && apellidos.length()>0) 
				|| (tipoDocumento!=null && tipoDocumento.length()>0) 
				|| (numeroDocumento!=null && numeroDocumento.length()>0)){
			
			usuarioBusqueda.setNombreUsuario(nombreUsuario);
			usuarioBusqueda.setApellidos(apellidos);
			usuarioBusqueda.setNumeroDocumento(numeroDocumento);
			try{
				if(tipoDocumento!=null && tipoDocumento.length()>0){
					tipoDocumentoInt = Integer.valueOf(tipoDocumento);
				}
			}catch (Exception e) {
				tipoDocumentoInt = null;
			}
			if(tipoDocumentoInt!=null && tipoDocumentoInt.intValue()>0){
				documentoIdentidad = new DocumentoIdentidad();
				documentoIdentidad.setId(tipoDocumentoInt);				
			}
			
			if(nombreRol!=null && nombreRol.length()>0){
				Rol rol = new Rol();
				rol.setNombre(nombreRol);
				usuarioBusqueda.setRoles(new ArrayList<Rol>());
				usuarioBusqueda.getRoles().add(rol);
			}
			usuarioBusqueda.setDocumentoIdentidad(documentoIdentidad);
		}
		
		if(numeroPagina!=null && numeroPagina.length()>0){
			try{
				numeroPaginaInt = Integer.valueOf(numeroPagina);
				primerResultado = Integer.valueOf(numeroPaginaInt.intValue()*cantidadFilasPorPagina.intValue());
			}catch (Exception e) {
				numeroPaginaInt = Integer.valueOf(0);
			}
		}
		DocumentoIdentidadConsultas documentoIdentidadConsultas = new DocumentoIdentidadConsultas();
		listaDocumentosIdentidad = documentoIdentidadConsultas.getTodosDocumentoIdentidad();
		
		RolesConsultas rolesConsultas = new RolesConsultas();
		listaRoles = rolesConsultas.getTodosRol();
		
		UsuariosConsultas usuariosConsultas = new UsuariosConsultas();
		cantidadUsuarios = usuariosConsultas.getCantidadUsuarios(usuarioBusqueda);
		
		if(cantidadUsuarios > cantidadFilasPorPagina){
			cantidadPaginas = cantidadUsuarios.intValue() / cantidadFilasPorPagina.intValue();
			if((cantidadUsuarios.intValue() % cantidadFilasPorPagina.intValue()) > 0){
				cantidadPaginas++;
			}			
		}
		
		if(numeroPaginaInt.intValue() + 1 > cantidadPaginas){
			numeroPaginaInt = Integer.valueOf(0);
			
		}
		
		listaUsuarios = usuariosConsultas.getUsuariosList(usuarioBusqueda, primerResultado, cantidadFilasPorPagina);
		
		request.setAttribute("listaRoles", listaRoles);
		request.setAttribute("listaUsuarios", listaUsuarios);
		request.setAttribute("listaDocumentosIdentidad", listaDocumentosIdentidad);
		request.setAttribute("cantidadPaginas", cantidadPaginas);
		request.setAttribute("numeroPagina", numeroPaginaInt);
		request.setAttribute("cantidadUsuarios", cantidadUsuarios);
		request.setAttribute("usuarioBusqueda", usuarioBusqueda);
		request.setAttribute("primerResultado", primerResultado);
		request.setAttribute("cantidadFilasPorPagina", cantidadFilasPorPagina);
		RequestDispatcher disp = request.getRequestDispatcher("pages/admin/usuariosList.jsp");
		disp.forward(request, response);
	}

}
